/*
    1、优化操作：只有选择了该商品，总计和总价才会进行计算(与淘宝相同功能)(注意：要在全选反选模块添加该函数，进行新的计算！) --> 第 82 行

*/

$(function () {
    // 1、全选，反选
    $('.checkall').click(function () {
        // console.log($(this).prop("checked"));  
        // 点击全选框，小选框选中（反之不选中）
        $('.j-checkbox,.checkall').prop('checked', $(this).prop("checked"))
        // 7、选中添加背景
        if ($(this).prop("checked")) {
            // 让所有的商品添加 check-cart-item
            $('.cart-item').addClass("check-cart-item");
        } else {
            $('.cart-item').removeClass("check-cart-item");
        }
        getSum()
    })
    // 小复选框全选中，全选按钮也选中（反之不选中）
    $('.j-checkbox').click(function () {
        // .j-checkbox:checked : 可获取当前处于选中状态的小复选框
        if ($('.j-checkbox:checked').length === $('.j-checkbox').length) {
            $('.checkall').prop('checked', true);
        } else {
            $('.checkall').prop('checked', false);
        }
        // 7、选中添加背景
        if ($(this).prop("checked")) {
            $(this).parents(".cart-item").addClass('check-cart-item');
        } else {
            $(this).parents(".cart-item").removeClass('check-cart-item')
        }
        getSum();
    })

    // 2、点击 ＋ 号，增加数量
    $('.increment').click(function () {
        let n = $(this).siblings('.itxt').val();    // 核心要点：获取当前文本框内的值，赋给变量 n   ！！！
        n++;
        $(this).siblings('.itxt').val(n);
        // 3、修改当前商品小计价格
        let num = $(this).siblings('.itxt').val();  // 获取商品数量
        let price = $(this).parents('.p-num').siblings('.p-price').text().substr(1);    // 获取当前商品单价
        $(this).parents('.p-num').siblings('.p-sum').html('￥' + (num * price).toFixed(2));
        getSum();

    })

    // 2、点击 - 号，减少数量
    $('.decrement').click(function () {
        let n = $(this).siblings('.itxt').val();
        n--;
        if (n < 1) {
            return;
        }
        $(this).siblings('.itxt').val(n);
        // 3、修改当前商品小计价格
        let num = $(this).siblings('.itxt').val();  // 获取商品数量
        let price = $(this).parents('.p-num').siblings('.p-price').text().substr(1);    // 获取当前商品单价
        $(this).parents('.p-num').siblings('.p-sum').html('￥' + (num * price).toFixed(2));
        getSum();
    })

    // 4、用户直接修改文本框内商品数量
    $('.itxt').change(function () {
        let num = $(this).val();    // 获取商品数量
        let price = $(this).parents('.p-num').siblings('.p-price').text().substr(1);    // 获取单价
        $(this).parents(".p-num").siblings(".p-sum").html('￥' + (num * price).toFixed(2));
        getSum();
    })

    getSum();   //刷新页面是，先计算一下

    // 5、计算总计 、总价 （核心要点：(1) 使用 each 遍历值，(2)核心优化：只有选择了该商品，总计和总价才会进行计算，要在全选反选模块添加该函数，进行新的计算）
    function getSum() {
        let totalNum = 0;      // 总计
        let totalPrice = 0;    // 总价
        // 修改总计 （注意：用 each进行遍历时，value的值是一个dom元素对象，要先用 $() 转换为jquery对象才能使用jq的方法！！）
        $('.itxt').each(function (index, value) {
            // 优化：增加判断条件，只有选择了该商品，总计和总价才会进行计算（利用遍历，判断每一个商品当前的复选框是否被选中）
            if ($(value).parents('.p-num').siblings(".p-checkbox").children('.j-checkbox').prop('checked') === true) {
                totalNum += parseInt($(value).val());
            }
        })
        $('.amount-sum em').html(totalNum);
        // 修改总价
        $('.p-sum').each(function (index, value) {
            // 优化：增加判断条件，只有选择了该商品，总计和总价才会进行计算（利用遍历，判断每一个商品当前的复选框是否被选中）
            if ($(value).siblings(".p-checkbox").children('.j-checkbox').prop('checked') === true) {
                totalPrice += parseFloat($(value).text().substr(1))
            }
        })
        $('.price-sum em').html("￥" + totalPrice.toFixed(2))
    }

    // 6、删除商品（3个地方）
    // (1)商品右侧的 删除功能
    $('.p-action a').click(function () {
        $(this).parents(".cart-item").remove();
        getSum()
    })
    // (2)商品下方的 删除选中的商品
    $('.remove-batch').click(function () {
        $('.j-checkbox:checked').parents('.cart-item').remove();
        $('.checkall').prop('checked', false);  // 同时取消全选框的勾选
        getSum()
    })
    // (3)商品下方的 清理购物车
    $('.clear-all').click(function () {
        $('.cart-item').remove();
        $('.checkall').prop('checked', false);
        getSum()
    })



})